//TODO 抽象类:抽象方法(抽象方法一边拿没有任何具体内容的实现),也可以包含实例方法,抽象类是不能被实例化的,为了让子类进行实例化以及实现内部的抽象方法
//TODO 抽象类的母的或作用最终都是为子类服务的
(() => {
//定义一个抽象类
    abstract class Animal {
        /*//抽象方法,不能有具体具体的实现
        abstract eat(){
            console.log('趴着吃,跪舔')
        }*/


       /* //抽象属性,不常写
        abstract name:string*/


        //抽象方法
        abstract eat():void

        //实例方法
        sayHi() {
            console.log('你好啊')
        }
    }

    //不能实例化抽象类的对象
    //const animal = new Animal()

    //定义一个子类
    class Dog extends Animal {
        /*name:string='小黄'*/
        //重新实现抽象类的抽象方法,此时这个方法就是当前dog类的实例方法
        eat() {
            console.log('舔着吃,真的好吃')
        }
    }

    //实例化Dog的对象
    const dog = new Dog()
    dog.eat()
    //抽象类中的实例方法
    dog.sayHi()
    /*console.log(dog.name)*/
})()
